package com.example.icongyou;

import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

// 引入 ExoPlayer 相关的类
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ui.PlayerView;

import com.example.icongyou.bean.ApiResponse;
import com.example.icongyou.manager.KgApiManager;

public class VideoUrlTestActivity extends AppCompatActivity {

    private static final String TAG = "VideoTestActivity";

    private TextView tvResult;
    private Button btnTest;

    // 替换 VideoView 为 ExoPlayer 的组件
    private PlayerView playerView;
    private ExoPlayer player;

    private KgApiManager kgapiManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_video);

        tvResult = findViewById(R.id.tvResult);
        btnTest = findViewById(R.id.btnTest);

        // 1. 查找 PlayerView (假设 XML 中 ID 为 playerView)
        playerView = findViewById(R.id.playerView);

        // 2. 初始化 ExoPlayer 实例
        player = new ExoPlayer.Builder(this).build();
        playerView.setPlayer(player); // 绑定 PlayerView 和 Player 实例

        // 3. 添加 ExoPlayer 错误监听器
        player.addListener(new Player.Listener() {
            @Override
            public void onPlayerError(PlaybackException error) {
                // 捕获播放错误
                String errorMsg = "ExoPlayer 播放错误！ErrorCode: " + error.errorCode +
                        ", Message: " + error.getMessage();

                Log.e(TAG, errorMsg, error); // 打印到 Logcat
                tvResult.append("\n\n❌ " + errorMsg); // 显示到 TextView
            }
        });

        // 初始化 KgapiManager
        kgapiManager = new KgApiManager();

        btnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                testGetVideoUrl();
            }
        });
    }

    private void testGetVideoUrl() {
        // 写死一个视频名字
        String videoName = "Python数据分析-第02课 Numpy.mp4";

        // 显示测试开始
        tvResult.setText("正在获取视频URL...\n视频名称: " + videoName);

        // 停止并清空播放器，准备新的视频
        if (player != null) {
            player.stop();
            player.clearMediaItems(); // 清除之前的媒体项
        }

        // 调用 getVideoUrl 方法
        kgapiManager.getVideoUrl(videoName, new KgApiManager.ApiCallback<ApiResponse<String>>() {
            @Override
            public void onSuccess(ApiResponse<String> response) {
                // 在主线程更新UI
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String videoUrl = response.getMsg();
                        System.out.println("视频Url："+videoUrl);
                        String result = "✅ 获取成功！\n\n" +
                                "视频名称: " + videoName + "\n\n" +
                                "返回数据: " + response.toString() + "\n\n" +
                                "视频URL: " + (videoUrl != null ? videoUrl : "null");
                        tvResult.setText(result);

                        // 成功获取 URL 后开始播放视频
                        if (player != null && videoUrl != null && !videoUrl.isEmpty()) {
                            try {
                                // 1. 创建 MediaItem
                                MediaItem mediaItem = MediaItem.fromUri(Uri.parse(videoUrl));

                                // 2. 设置给播放器
                                player.setMediaItem(mediaItem);

                                // 3. 准备并开始播放
                                player.prepare();
                                player.play(); // 自动开始播放

                                tvResult.append("\n\n⭐ 视频开始加载/播放...");
                            } catch (Exception e) {
                                // 捕获设置播放器时发生的异常
                                Log.e(TAG, "设置播放器失败", e);
                                tvResult.append("\n\n❌ 播放设置失败: " + e.getMessage());
                            }
                        } else {
                            tvResult.append("\n\n❌ 视频URL为空，无法播放。");
                        }
                    }
                });
            }

            @Override
            public void onError(String error) {
                // 在主线程更新UI
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String result = "❌ 获取失败！\n\n" +
                                "视频名称: " + videoName + "\n\n" +
                                "错误信息: " + error;
                        tvResult.setText(result);
                    }
                });
            }
        });
    }

    // **********************************************
    // 关键：ExoPlayer 必须在 Activity 生命周期中管理资源
    // **********************************************

    @Override
    protected void onStart() {
        super.onStart();
        // 确保播放器在 Activity 可见时恢复
        if (player != null) {
            player.play();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 在 onResume 确保播放器恢复
        if (player != null) {
            player.play();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 在 onPause 暂停播放
        if (player != null) {
            player.pause();
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        // 在 onStop 暂停播放
        if (player != null) {
            player.pause();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 释放播放器资源，避免内存泄漏
        if (player != null) {
            player.release();
            player = null;
        }
    }
}